home *** CD-ROM | disk | FTP | other *** search
- #include "SpriteGame.h"
- #include "GWorldUtils.h"
- #include "SoundManager.h"
-
- CSpriteGame::CSpriteGame(short imageID)
- : fWorld(NULL),
- fSafeHeap(NULL),
- fSoundManager(NULL),
- fImageID(imageID)
- {
- }
-
-
- Boolean CSpriteGame::GetImage(short imageID,GWorldPtr& outGWorld,RgnHandle& outMask)
- {
- Boolean foundItQ = false;
-
- for(short z = 0;z<fImageList.Size();z++){
- if(fImageList[z].id == imageID){
- outGWorld = fImageList[z].gWorld;
- outMask = fImageList[z].maskRgn;
- foundItQ = true;
- break;
- }
- }
-
- return foundItQ;
- }
-
-
- OSErr CSpriteGame::PreloadGameImages()
- {
- OSErr err = noErr;
- StSaveGWorld save;
-
- short** list = (short**)Get1Resource('IMGE',fImageID);
-
- if(list == NULL){
- err = ResError();
- if(err == noErr){
- err = resNotFound;
- }
- }else{
- short num = GetHandleSize((Handle)list)/sizeof(short);
-
- err = fImageList.Reallocate(num);
- if(err == noErr){
- for(short z = 0;z<num;z++){
- fImageList[z].gWorld = NULL;
- fImageList[z].maskRgn = NULL;
- }
- Rect bounds = {0,0,32,32};
-
- for(short z = 0;z<num;z++){
- fImageList[z].id = (*list)[z];
-
- err = NewCIconGWorld(fImageList[z].id,&fImageList[z].gWorld,&fImageList[z].maskRgn);
- if(err == noErr){
- HLock((Handle)fImageList[z].maskRgn);
- }else{
- err = noErr;
- }
- }
- }
- }
-
- return err;
- }
-
- GWorldPtr CSpriteGame::GetImage(short imageID)
- {
- Entry* entry = LocateEntryByID(imageID);
-
- if(entry == NULL){
- return NULL;
- }else{
- return entry->gWorld;
- }
- }
-
-
- RgnHandle CSpriteGame::GetImageMask(short imageID)
- {
- Entry* entry = LocateEntryByID(imageID);
-
- if(entry == NULL){
- return NULL;
- }else{
- return entry->maskRgn;
- }
- }
-
-
- CSpriteGame::Entry* CSpriteGame::LocateEntryByID(short inID)
- {
- Entry* result = NULL;
-
- for(short z = 0;z<fImageList.Size();z++){
- if(fImageList[z].id == inID){
- result = &fImageList[z];
- break;
- }
- }
-
- return result;
- }
-
-
- void CSpriteGame::PlaySound(short sndID,Boolean loopQ)
- {
- fSoundManager->PlaySound(sndID,loopQ);
- }
-
-
-
- void CSpriteGame::StartGame()
- {
- fWorld->Start();
- }
-
-
- void CSpriteGame::StopGame()
- {
- fWorld->Stop();
- }
-
-
- void CSpriteGame::DrawBackground(const Rect& inBounds)
- {
-
- }
-
-
- OSErr CSpriteGame::Initialize()
- {
- OSErr err = noErr;
-
- fSafeHeap = new CStaticHeap(fMacHeap, kHeapSize);
- if(!fSafeHeap->HeapOK()){
- err = -108;
- }else{
- MHeapObject::SetObjectHeap(fSafeHeap);
-
- fSoundManager = new SoundManager(err);
- if(err == noErr){
- err = PreloadGameImages();
- if(err == noErr){
- fWorld = new CSpriteWorld(err);
- if(err == noErr){
- StSaveGWorld saveGWorld;
-
- fWorld->GetBackgroundCanvas()->PrepareToDraw();
- DrawBackground(*fWorld->GetBackgroundCanvas()->GetBounds());
- }
- }
- }
- }
-
- return err;
- }
-
-
-
- CGameSprite::CGameSprite(CSpriteWorld* world,CSpriteGame* game,long id,GWorldPtr image,
- short startTop,short startLeft,RgnHandle mask)
- : CPixMapSprite(world, id, image, startTop, startLeft, mask),
- fGame(game)
- {
- }
-
-
- CGameSprite::~CGameSprite()
- {
- }
-
- void CGameSprite::SetImageID(short inID)
- {
- GWorldPtr gWorld;
- RgnHandle mask;
-
- if(fGame->GetImage(inID, gWorld, mask)){
- SetImage(gWorld, mask);
- }
- }
-
- void CGameSprite::PlaySound(short soundID)
- {
- fGame->PlaySound(soundID);
- }
-
-
-
-
- CSpriteGame::~CSpriteGame()
- {
- delete fWorld;
- delete fSafeHeap;
- delete fSoundManager;
-
- for(short z = 0;z<fImageList.Size();z++){
- if(fImageList[z].gWorld != NULL){
- DisposeGWorld(fImageList[z].gWorld);
- }
- if(fImageList[z].maskRgn != NULL){
- DisposeRgn(fImageList[z].maskRgn);
- }
- }
- }
-
-
- OSErr CSpriteGame::IntroduceExtensionIcon(GWorldPtr image,RgnHandle mask)
- {
- OSErr err = noErr;
-
- // ##BUG## need to track the image and mask so I can delete them later
-
- MakeExtensionSprite(image,mask);
-
- return err;
- }
-